package web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import service.GrupoProdutoService;
import service.MarcaService;
import service.ProdutoService;
import service.VendaService;
import entity.FormaPagamentoVenda;
import entity.GrupoProduto;
import entity.ItemVenda;
import entity.MarcaProduto;
import entity.Produto;
import entity.Venda;

@Controller
@Scope("view")
public class RelatorioVendasMB extends BaseManagedBean implements Serializable {

	private static final long serialVersionUID = 2980992478110115218L;

	@Autowired
	private VendaService vendaService;

	private Date dataInicial;

	private Date dataFinal;

	private List<Venda> listaVendas;

	private Log log = LogFactory.getLog(RelatorioVendasMB.class);

	private List<ItemVenda> listaItemVenda;

	private List<FormaPagamentoVenda> listaFormasPagamento;

	private Venda vendaSelecionada;

	private int totalItensVendidos;

	private MarcaProduto marcaProduto;

	private List<MarcaProduto> listaDeMarcas;

	private GrupoProduto grupoProduto;

	private List<GrupoProduto> listaDeGrupos;

	@Autowired
	private ProdutoService produtoService;
	@Autowired
	private GrupoProdutoService grupoProdutoService;
	@Autowired
	private MarcaService marcaService;

	private List<Produto> listaDeProdutos;

	private Produto produto;


	public RelatorioVendasMB() {
		log.debug("Inicializou o RelatorioVendasMB.");
	}

	/**
	 * @see web.BaseManagedBean#postConstruct()
	 */
	@Override
	@PostConstruct
	public void postConstruct() throws Exception {
		super.postConstruct();
		iniciar();
	}

	private void iniciar() {
		listaVendas = new ArrayList<Venda>();

		dataInicial = new Date();
		dataFinal = new Date();

		listaDeMarcas = marcaService.listarAtivos();
		listaDeGrupos = grupoProdutoService.listarAtivos();
		listaDeProdutos = produtoService.listarAtivos();

	}

	public void doBuscarVendaAction() {
		final Venda venda = vendaService.buscarVendaPorChave(vendaSelecionada
				.getId());

		listaItemVenda = venda.getListaItemVenda();

		listaFormasPagamento = venda.getListaFormasPagamento();

		for (ItemVenda item : listaItemVenda) {
			totalItensVendidos += item.getQuantidade();
		}
	}

	public void doListarAction() {
		final Calendar calendarInicial = Calendar.getInstance();
		calendarInicial.setTime(dataInicial);
		calendarInicial.set(Calendar.HOUR_OF_DAY, 0);
		calendarInicial.set(Calendar.MINUTE, 0);
		calendarInicial.set(Calendar.SECOND, 0);
		calendarInicial.set(Calendar.MILLISECOND, 0);

		final Calendar calendarFinal = Calendar.getInstance();
		calendarFinal.setTime(dataFinal);
		calendarFinal.set(Calendar.HOUR_OF_DAY, 23);
		calendarFinal.set(Calendar.MINUTE, 59);
		calendarFinal.set(Calendar.SECOND, 59);
		calendarFinal.set(Calendar.MILLISECOND, 999);

		listaVendas = vendaService.listarVendasPorPeriodo(
				calendarInicial.getTime(), calendarFinal.getTime());
	}

	protected void limparTela() {
		iniciar();
	}

	public Date getDataInicial() {
		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {
		this.dataInicial = dataInicial;
	}

	public Date getDataFinal() {
		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {
		this.dataFinal = dataFinal;
	}

	public List<Venda> getListaVendas() {
		return listaVendas;
	}

	public Venda getVendaSelecionada() {
		return vendaSelecionada;
	}

	public void setVendaSelecionada(Venda vendaSelecionada) {
		this.vendaSelecionada = vendaSelecionada;
	}

	public int getTotalItensVendidos() {
		return totalItensVendidos;
	}

	public List<ItemVenda> getListaItemVenda() {
		return listaItemVenda;
	}

	public List<FormaPagamentoVenda> getListaFormasPagamento() {
		return listaFormasPagamento;
	}

	public MarcaProduto getMarcaProduto() {
		return marcaProduto;
	}

	public void setMarcaProduto(MarcaProduto marcaProduto) {
		this.marcaProduto = marcaProduto;
	}

	public List<MarcaProduto> getListaDeMarcas() {
		return listaDeMarcas;
	}

	public void setListaDeMarcas(List<MarcaProduto> listaDeMarcas) {
		this.listaDeMarcas = listaDeMarcas;
	}

	public GrupoProduto getGrupoProduto() {
		return grupoProduto;
	}

	public void setGrupoProduto(GrupoProduto grupoProduto) {
		this.grupoProduto = grupoProduto;
	}

	public List<GrupoProduto> getListaDeGrupos() {
		return listaDeGrupos;
	}

	public void setListaDeGrupos(List<GrupoProduto> listaDeGrupos) {
		this.listaDeGrupos = listaDeGrupos;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public List<Produto> getListaDeProdutos() {
		return listaDeProdutos;
	}

	public void setListaDeProdutos(List<Produto> listaDeProdutos) {
		this.listaDeProdutos = listaDeProdutos;
	}

}
